package com.sugon.modules.device.model.entity;

import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateField;
import cn.hutool.core.util.StrUtil;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.hibernate.validator.constraints.NotBlank;
import org.springframework.format.annotation.DateTimeFormat;

import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
import java.util.Set;

/**
 * 设备维护计划表实体,表名 DEV_MAINTENANCE_PLAN
 * 一般而言一个车间产线生成一个计划
 *
 * @author YuXD
 * @date 2020-08-10 10:52:35
 */
@Data
public class DevMaintenancePlanEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 车间
     */
    private String workshop;

    /**
     * 审批备注
     */
    private String approveRemark;
    /**
     * 审批时间
     */
    private Date approveDate;
    /**
     * 审批人用户ID
     */
    private String approver;
    /**
     * 最近一次更新用户ID
     */
    private String modifyUser;
    /**
     * 最近一次更新时间
     */
    private Date gmtModified;
    /**
     * 创建用户ID
     */
    private String createUser;
    /**
     * 创建时间
     */
    private Date gmtCreate;
    /**
     * 删除状态
     */
    private Integer delFlag;
    /**
     * 计划状态
     */
    private Integer status;
    /**
     * 计划备注
     */
    private String remark;
    /**
     * 计划结束时间
     */
    @NotNull(message = "计划结束日期必填")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date endDate;
    /**
     * 计划开始时间
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @NotNull(message = "计划开始日期必填")
    private Date startDate;

    /**
     * 维护计划排除的范围 一般表示日期所在的那一周
     */
    private String excludeRange;

    /**
     * 年度、年份
     */
    private Integer yearly;

    /**
     * 设备产线ID
     */
    @NotBlank(message = "关联设备产线必选")
    private String devLineId;

    /**
     * 计划名称
     */
    @NotBlank(message = "计划名称必填")
    private String planName;

    /**
     * ID
     */
    private String id;

    /**
     * 创建人名称
     */
    private String createUserName;

    /**
     * 审批人名称
     */
    private String approverName;

    /**
     * 设备产线名称，展示用
     */
    private String devLineName;

    /**
     * 所属车间名称
     */
    private String workshopName;

    /**
     * 获取日期范围所在的周次，保证不重复
     * 比如2022-01-01,2022-01-03 -> [1,2]
     */
    public Set<Integer> loadExcludeWeeklySet() {
        Set<Integer> excludeWeeklySet = CollectionUtil.newHashSet();
        if (StrUtil.isNotEmpty(this.excludeRange)) {
            String[] excludeDayArray = this.excludeRange.split(",");
            for (String excludeDay : excludeDayArray) {
                excludeWeeklySet.add(cn.hutool.core.date.DateUtil.parseDate(excludeDay).getField(DateField.WEEK_OF_YEAR));
            }
        }
        return excludeWeeklySet;
    }

}
